{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "![miad4.png](Archivos/miad4.png)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [ "hide-input", "thebe-init" ] }, "outputs": [], "source": [ "import os\n", "# Por precaución, cambiamos el directorio activo de Python a aquel que contenga este notebook\n", "if \"PAD-book\" in os.listdir():\n", " os.chdir(r\"PAD-book/Laboratorio-Computacional-de-Analytics/S4 - Explorar, modificar y visualizar bases de datos/S4.TU1/\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Explorar bases de datos" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Explorar bases de datos es uno de los pasos esenciales en cualquier proyecto de analítica de datos, pues nos permite identificar aspectos útiles del caso de estudio." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "En este tutorial establecemos nociones fundamentales sobre el uso del paquete `pandas` para explorar datos." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Requisitos" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Para desarrollar este tutorial necesitarás:\n", "\n", "* Utilizar arreglos y operaciones básicas y vectorizadas en `numpy`.
\n", "* Crear, consultar y utilizar métodos para explorar y manipular objetos tipo `DataFrame` en `pandas`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Objetivos" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Al final de este tutorial podrás:\n", "\n", "**1.** Indexar un `DataFrame` empleando índices múltiples.
\n", "**2.** Aplicar distintos tipos de filtrado utilizando `pandas`.
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1. Indexar un `DataFrame`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Entre los aspectos a detallar al explorar una base de datos, se encuentra la llave o el *ID* que distingue un registro de otro. Esta llave no siempre se conoce de antemano o, en ocasiones, deseamos modificarla." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Para distinguir una observación (o fila) de otra en un `DataFrame`, `pandas` define un objeto de tipo `Index` (o `MultiIndex`)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Al analizar datos generalmente requerimos que el índice de un `DataFrame` corresponda a una llave de la base de datos. Todo registro debe tener asignada una llave única, con el fin de distinguirlo de los demás registros. En ocasiones debemos usar más de una característica del registro para crear una llave, es decir, debemos definir un índice de múltiples niveles." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Importamos los paquetes `pandas` y `numpy` ." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Veamos el siguiente ejemplo para considerar un caso en el que se necesite más de una columna para indexar un `DataFrame`: " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Ejemplo 1 " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "En la siguiente celda de código declaramos un `DataFrame` que contiene información de algunas personas." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "tags": [ "output_scroll" ] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
NombreApellidoEdadCiudad
0JorgeSuárez28Bogotá
1LauraPoveda37Lima
2PabloStecco30Lima
3JorgePoveda30Bogotá
\n", "
" ], "text/plain": [ " Nombre Apellido Edad Ciudad\n", "0 Jorge Suárez 28 Bogotá\n", "1 Laura Poveda 37 Lima\n", "2 Pablo Stecco 30 Lima\n", "3 Jorge Poveda 30 Bogotá" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nombres = pd.DataFrame([[\"Jorge\", \"Suárez\", 28, \"Bogotá\"],\n", " [\"Laura\", \"Poveda\", 37, \"Lima\" ],\n", " [\"Pablo\", \"Stecco\", 30, \"Lima\" ],\n", " [\"Jorge\", \"Poveda\", 30, \"Bogotá\"]],\n", " columns = [\"Nombre\", \"Apellido\", \"Edad\", \"Ciudad\"])\n", "nombres" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Si bien es posible utilizar la columna `\"nombre\"` para indexar la base de datos, este índice no sería una llave, puesto que uno de los valores del índice (`\"Jorge\"`) corresponde a más de un registro:\n", "* `[\"Jorge\", \"Suárez\", 28, \"Bogotá\"]` y\n", "* `[\"Jorge\", \"Poveda\", 30, \"Bogotá\"]`." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "tags": [ "output_scroll" ] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
NombreApellidoEdadCiudad
Nombre
JorgeJorgeSuárez28Bogotá
JorgeJorgePoveda30Bogotá
\n", "
" ], "text/plain": [ " Nombre Apellido Edad Ciudad\n", "Nombre \n", "Jorge Jorge Suárez 28 Bogotá\n", "Jorge Jorge Poveda 30 Bogotá" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nombres.index = nombres['Nombre']\n", "nombres.loc['Jorge']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Dado que queremos utilizar el nombre para construir la llave de nuestra base de datos, podemos agregar a cada valor del índice el apellido del registro y así evitar valores duplicados." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "tags": [ "output_scroll" ] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
NombreApellidoEdadCiudad
(Jorge, Suárez)JorgeSuárez28Bogotá
(Laura, Poveda)LauraPoveda37Lima
(Pablo, Stecco)PabloStecco30Lima
(Jorge, Poveda)JorgePoveda30Bogotá
\n", "
" ], "text/plain": [ " Nombre Apellido Edad Ciudad\n", "(Jorge, Suárez) Jorge Suárez 28 Bogotá\n", "(Laura, Poveda) Laura Poveda 37 Lima\n", "(Pablo, Stecco) Pablo Stecco 30 Lima\n", "(Jorge, Poveda) Jorge Poveda 30 Bogotá" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nombres_indice = pd.Index(data = nombres[[\"Nombre\", \"Apellido\"]])\n", "nombres.index = nombres_indice\n", "\n", "nombres" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Con la modificación anterior podemos referirnos a la información de `\"Jorge Suárez\"` o de `\"Jorge Poveda\"`." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
NombreApellidoEdadCiudad
(Jorge, Poveda)JorgePoveda30Bogotá
\n", "
" ], "text/plain": [ " Nombre Apellido Edad Ciudad\n", "(Jorge, Poveda) Jorge Poveda 30 Bogotá" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nombres.loc[[(\"Jorge\", \"Poveda\")]]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1.1. Objeto de tipo `MultiIndex`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "La clase `MultiIndex` permite crear un índice múltiple para los registros de un `DataFrame` o un `Series`. Podemos declarar objetos de tipo `MultiIndex` a partir de métodos que reciben diferentes tipos de objeto por parámetro." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "|Métodos|
Descripción
|\n", "|:-:|:-|\n", "|`from_arrays`| A partir de un arreglo de arreglos|\n", "|`from_product`| A partir del producto cartesiano de estructuras de datos|\n", "|`from_tuples`| A partir de una lista de tuplas|\n", "|`from_frame`| A partir de la lista actual con otra lista|" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Ejemplo 2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Creamos un `MultiIndex` a partir de las columnas `\"nombre\"` y `\"apellido\"`y lo utilizamos para indexar el `DataFrame` contenido en la variable `nombres`.\n", "\n", "Usamos el método `from_arrays`." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "MultiIndex([('Jorge', 'Suárez'),\n", " ('Laura', 'Poveda'),\n", " ('Pablo', 'Stecco'),\n", " ('Jorge', 'Poveda')],\n", " names=['Nombre', 'Apellido'])" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nombres_indice = pd.MultiIndex.from_arrays([nombres[\"Nombre\"],nombres[\"Apellido\"]])\n", "nombres_indice" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Después usamos el método `reindex` para asignar el nuevo `MultiIndex`. " ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "tags": [ "output_scroll" ] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
NombreApellidoEdadCiudad
NombreApellido
JorgeSuárezJorgeSuárez28Bogotá
LauraPovedaLauraPoveda37Lima
PabloSteccoPabloStecco30Lima
JorgePovedaJorgePoveda30Bogotá
\n", "
" ], "text/plain": [ " Nombre Apellido Edad Ciudad\n", "Nombre Apellido \n", "Jorge Suárez Jorge Suárez 28 Bogotá\n", "Laura Poveda Laura Poveda 37 Lima\n", "Pablo Stecco Pablo Stecco 30 Lima\n", "Jorge Poveda Jorge Poveda 30 Bogotá" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nombres.reindex(nombres_indice)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "También podemos nombrar columnas que tengan múltiples niveles a partir de un objeto `MultiIndex`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Ejemplo 3" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A continuación importamos una base de datos llamada `\"Bid-Cornell.csv\"` que reúne información sobre un grupo de ciudadanos y los medios de comunicación que utilizan para informarse sobre noticias generales o noticias acerca del COVID-19." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "scrolled": true, "tags": [ "output_scroll" ] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
medios_noti_redessocialesmedios_noti_chatmedios_noti_periodicosmedios_noti_tvmedios_noti_radiomedios_covid_redessocialesmedios_covid_chatmedios_covid_periodicosmedios_covid_tvmedios_covid_radio
id
1000060.0SiempreSiempreCasi siempreA vecesNuncaSiempreSiempreSiempreA vecesNunca
1000734.0Casi siempreA vecesA vecesCasi siempreCasi siempreCasi siempreCasi siempreA vecesCasi siempreCasi siempre
1000120.0NuncaA vecesA vecesSiempreSiempreNuncaA vecesA vecesSiempreSiempre
1000235.0SiempreSiempreA vecesA vecesA vecesSiempreSiempreNuncaA vecesNunca
1000828.0Casi siempreA vecesA vecesA vecesA vecesCasi siempreCasi siempreA vecesA vecesNunca
.................................
17001614.0A vecesA vecesCasi siempreSiempreCasi siempreNuncaA vecesCasi siempreSiempreCasi siempre
17017448.0SiempreSiempreA vecesA vecesNuncaSiempreSiempreA vecesA vecesNunca
17013032.0SiempreSiempreSiempreSiempreSiempreSiempreCasi siempreSiempreSiempreSiempre
17014760.0SiempreSiempreSiempreCasi siempreCasi siempreSiempreSiempreSiempreCasi siempreCasi siempre
17003990.0Casi siempreNuncaNuncaCasi siempreCasi siempreCasi siempreNuncaA vecesCasi siempreCasi siempre
\n", "

216092 rows × 10 columns

\n", "
" ], "text/plain": [ " medios_noti_redessociales medios_noti_chat medios_noti_periodicos \\\n", "id \n", "1000060.0 Siempre Siempre Casi siempre \n", "1000734.0 Casi siempre A veces A veces \n", "1000120.0 Nunca A veces A veces \n", "1000235.0 Siempre Siempre A veces \n", "1000828.0 Casi siempre A veces A veces \n", "... ... ... ... \n", "17001614.0 A veces A veces Casi siempre \n", "17017448.0 Siempre Siempre A veces \n", "17013032.0 Siempre Siempre Siempre \n", "17014760.0 Siempre Siempre Siempre \n", "17003990.0 Casi siempre Nunca Nunca \n", "\n", " medios_noti_tv medios_noti_radio medios_covid_redessociales \\\n", "id \n", "1000060.0 A veces Nunca Siempre \n", "1000734.0 Casi siempre Casi siempre Casi siempre \n", "1000120.0 Siempre Siempre Nunca \n", "1000235.0 A veces A veces Siempre \n", "1000828.0 A veces A veces Casi siempre \n", "... ... ... ... \n", "17001614.0 Siempre Casi siempre Nunca \n", "17017448.0 A veces Nunca Siempre \n", "17013032.0 Siempre Siempre Siempre \n", "17014760.0 Casi siempre Casi siempre Siempre \n", "17003990.0 Casi siempre Casi siempre Casi siempre \n", "\n", " medios_covid_chat medios_covid_periodicos medios_covid_tv \\\n", "id \n", "1000060.0 Siempre Siempre A veces \n", "1000734.0 Casi siempre A veces Casi siempre \n", "1000120.0 A veces A veces Siempre \n", "1000235.0 Siempre Nunca A veces \n", "1000828.0 Casi siempre A veces A veces \n", "... ... ... ... \n", "17001614.0 A veces Casi siempre Siempre \n", "17017448.0 Siempre A veces A veces \n", "17013032.0 Casi siempre Siempre Siempre \n", "17014760.0 Siempre Siempre Casi siempre \n", "17003990.0 Nunca A veces Casi siempre \n", "\n", " medios_covid_radio \n", "id \n", "1000060.0 Nunca \n", "1000734.0 Casi siempre \n", "1000120.0 Siempre \n", "1000235.0 Nunca \n", "1000828.0 Nunca \n", "... ... \n", "17001614.0 Casi siempre \n", "17017448.0 Nunca \n", "17013032.0 Siempre \n", "17014760.0 Casi siempre \n", "17003990.0 Casi siempre \n", "\n", "[216092 rows x 10 columns]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_covid_19 = pd.read_csv(\"./Archivos/BID-Cornell.csv\", index_col = 0) \n", "df_covid_19" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Los nombres de las columnas de `df_covid_19` están estructurados de la siguiente manera:\n", "\n", "0. Prefijo:\n", " * Medios de comunicación (`\"medios\"`).

\n", "\n", "1. Contexto de la información: \n", " * Noticias generales (`\"noti\"`).\n", " * Noticias sobre el COVID-19 (`\"covid\"`).

\n", " \n", "2. Medio de comunicación empleado:\n", " * Redes Sociales (`\"redessociales\"`).\n", " * Chat (`\"chat\"`).\n", " * Periodicos (`\"periodicos\"`).\n", " * TV (`\"tv\"`).\n", " * Radio (`\"radio\"`)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Por ejemplo, `\"medios_noti_redessociales\"` representa que el medio de comunicación utilizado para informarse acerca de noticias generales es las redes sociales." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Podemos utilizar un objeto `MultiIndex` para nombrar las columnas con un mejor orden, coherente con la estructura descrita. Seccionamos el nombre de cada columna donde coincidan guiones bajos (`\"_\"`) empleando métodos de `pandas` para columnas con datos de tipo `str`." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "MultiIndex([( 'noti', 'redessociales'),\n", " ( 'noti', 'chat'),\n", " ( 'noti', 'periodicos'),\n", " ( 'noti', 'tv'),\n", " ( 'noti', 'radio'),\n", " ('covid', 'redessociales'),\n", " ('covid', 'chat'),\n", " ('covid', 'periodicos'),\n", " ('covid', 'tv'),\n", " ('covid', 'radio')],\n", " )" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#Obtenemosla lista de columnas del DataFrame y con .str tomamos para cada una\n", "#lo que está después de \"medios_\" (por eso el [7:])\n", "df_covid_19.columns = df_covid_19.columns.str[7:]\n", "\n", "#Separamos las cadenas de texto al encontrar un \"_\"\n", "#El parámetro expand nos indica si deseamos dividir la cadena en columnas separadas (creando el multiindex)\n", "indice_multiple_columnas = df_covid_19.columns.str.split(\"_\", expand = True)\n", "indice_multiple_columnas" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "scrolled": true, "tags": [ "output_scroll" ] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
noticovid
redessocialeschatperiodicostvradioredessocialeschatperiodicostvradio
id
1000060.0SiempreSiempreCasi siempreA vecesNuncaSiempreSiempreSiempreA vecesNunca
1000734.0Casi siempreA vecesA vecesCasi siempreCasi siempreCasi siempreCasi siempreA vecesCasi siempreCasi siempre
1000120.0NuncaA vecesA vecesSiempreSiempreNuncaA vecesA vecesSiempreSiempre
1000235.0SiempreSiempreA vecesA vecesA vecesSiempreSiempreNuncaA vecesNunca
1000828.0Casi siempreA vecesA vecesA vecesA vecesCasi siempreCasi siempreA vecesA vecesNunca
.................................
17001614.0A vecesA vecesCasi siempreSiempreCasi siempreNuncaA vecesCasi siempreSiempreCasi siempre
17017448.0SiempreSiempreA vecesA vecesNuncaSiempreSiempreA vecesA vecesNunca
17013032.0SiempreSiempreSiempreSiempreSiempreSiempreCasi siempreSiempreSiempreSiempre
17014760.0SiempreSiempreSiempreCasi siempreCasi siempreSiempreSiempreSiempreCasi siempreCasi siempre
17003990.0Casi siempreNuncaNuncaCasi siempreCasi siempreCasi siempreNuncaA vecesCasi siempreCasi siempre
\n", "

216092 rows × 10 columns

\n", "
" ], "text/plain": [ " noti \\\n", " redessociales chat periodicos tv radio \n", "id \n", "1000060.0 Siempre Siempre Casi siempre A veces Nunca \n", "1000734.0 Casi siempre A veces A veces Casi siempre Casi siempre \n", "1000120.0 Nunca A veces A veces Siempre Siempre \n", "1000235.0 Siempre Siempre A veces A veces A veces \n", "1000828.0 Casi siempre A veces A veces A veces A veces \n", "... ... ... ... ... ... \n", "17001614.0 A veces A veces Casi siempre Siempre Casi siempre \n", "17017448.0 Siempre Siempre A veces A veces Nunca \n", "17013032.0 Siempre Siempre Siempre Siempre Siempre \n", "17014760.0 Siempre Siempre Siempre Casi siempre Casi siempre \n", "17003990.0 Casi siempre Nunca Nunca Casi siempre Casi siempre \n", "\n", " covid \\\n", " redessociales chat periodicos tv \n", "id \n", "1000060.0 Siempre Siempre Siempre A veces \n", "1000734.0 Casi siempre Casi siempre A veces Casi siempre \n", "1000120.0 Nunca A veces A veces Siempre \n", "1000235.0 Siempre Siempre Nunca A veces \n", "1000828.0 Casi siempre Casi siempre A veces A veces \n", "... ... ... ... ... \n", "17001614.0 Nunca A veces Casi siempre Siempre \n", "17017448.0 Siempre Siempre A veces A veces \n", "17013032.0 Siempre Casi siempre Siempre Siempre \n", "17014760.0 Siempre Siempre Siempre Casi siempre \n", "17003990.0 Casi siempre Nunca A veces Casi siempre \n", "\n", " \n", " radio \n", "id \n", "1000060.0 Nunca \n", "1000734.0 Casi siempre \n", "1000120.0 Siempre \n", "1000235.0 Nunca \n", "1000828.0 Nunca \n", "... ... \n", "17001614.0 Casi siempre \n", "17017448.0 Nunca \n", "17013032.0 Siempre \n", "17014760.0 Casi siempre \n", "17003990.0 Casi siempre \n", "\n", "[216092 rows x 10 columns]" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#Reasignamos el multinindex que creamos antes a las columnas del DataFrame (df)\n", "df_covid_19.columns = indice_multiple_columnas\n", "df_covid_19" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "De esta manera, si queremos tener acceso a la información sobre el uso de las redes sociales como medio de comunicación para informarse sobre el COVID-19, podemos usar el método `loc`." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "id\n", "1000060.0 Siempre\n", "1000734.0 Casi siempre\n", "1000120.0 Nunca\n", "1000235.0 Siempre\n", "1000828.0 Casi siempre\n", " ... \n", "17001614.0 Nunca\n", "17017448.0 Siempre\n", "17013032.0 Siempre\n", "17014760.0 Siempre\n", "17003990.0 Casi siempre\n", "Name: (covid, redessociales), Length: 216092, dtype: object" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_covid_19.loc[:, ('covid', 'redessociales')]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2. Filtrar bases de datos utilizando la librería `pandas`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2.1. Filtrado de posiciones no consecutivas" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Si las posiciones que queremos seleccionar no son consecutivas, debemos representarlas en una lista. A continuación, vemos un ejemplo de esto." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Ejemplo 5" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Se nos solicita mostrar un `DataFrame` que contenga únicamente las 10 primeras y las 10 últimas observaciones del `DataFrame` `df_covid_19`." ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "scrolled": false, "tags": [ "output_scroll" ] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
noticovid
redessocialeschatperiodicostvradioredessocialeschatperiodicostvradio
id
1000060.0SiempreSiempreCasi siempreA vecesNuncaSiempreSiempreSiempreA vecesNunca
1000734.0Casi siempreA vecesA vecesCasi siempreCasi siempreCasi siempreCasi siempreA vecesCasi siempreCasi siempre
1000120.0NuncaA vecesA vecesSiempreSiempreNuncaA vecesA vecesSiempreSiempre
1000235.0SiempreSiempreA vecesA vecesA vecesSiempreSiempreNuncaA vecesNunca
1000828.0Casi siempreA vecesA vecesA vecesA vecesCasi siempreCasi siempreA vecesA vecesNunca
1000352.0A vecesA vecesSiempreCasi siempreCasi siempreA vecesA vecesSiempreSiempreSiempre
1000746.0Casi siempreCasi siempreCasi siempreCasi siempreNuncaCasi siempreCasi siempreCasi siempreCasi siempreNunca
1000079.0SiempreSiempreSiempreNuncaA vecesSiempreSiempreSiempreNuncaA veces
1000110.0SiempreSiempreSiempreSiempreSiempreSiempreSiempreSiempreSiempreSiempre
1000221.0Casi siempreA vecesSiempreSiempreNuncaCasi siempreA vecesSiempreSiempreNunca
17000500.0SiempreSiempreSiempreSiempreCasi siempreCasi siempreCasi siempreCasi siempreSiempreCasi siempre
17000564.0Casi siempreA vecesA vecesNuncaA vecesCasi siempreCasi siempreA vecesNuncaA veces
17015108.0A vecesA vecesA vecesNuncaNuncaA vecesA vecesA vecesNuncaNunca
17020582.0SiempreSiempreSiempreSiempreSiempreSiempreSiempreSiempreSiempreSiempre
17003368.0SiempreSiempreA vecesA vecesA vecesSiempreSiempreA vecesSiempreA veces
17001614.0A vecesA vecesCasi siempreSiempreCasi siempreNuncaA vecesCasi siempreSiempreCasi siempre
17017448.0SiempreSiempreA vecesA vecesNuncaSiempreSiempreA vecesA vecesNunca
17013032.0SiempreSiempreSiempreSiempreSiempreSiempreCasi siempreSiempreSiempreSiempre
17014760.0SiempreSiempreSiempreCasi siempreCasi siempreSiempreSiempreSiempreCasi siempreCasi siempre
17003990.0Casi siempreNuncaNuncaCasi siempreCasi siempreCasi siempreNuncaA vecesCasi siempreCasi siempre
\n", "
" ], "text/plain": [ " noti \\\n", " redessociales chat periodicos tv \n", "id \n", "1000060.0 Siempre Siempre Casi siempre A veces \n", "1000734.0 Casi siempre A veces A veces Casi siempre \n", "1000120.0 Nunca A veces A veces Siempre \n", "1000235.0 Siempre Siempre A veces A veces \n", "1000828.0 Casi siempre A veces A veces A veces \n", "1000352.0 A veces A veces Siempre Casi siempre \n", "1000746.0 Casi siempre Casi siempre Casi siempre Casi siempre \n", "1000079.0 Siempre Siempre Siempre Nunca \n", "1000110.0 Siempre Siempre Siempre Siempre \n", "1000221.0 Casi siempre A veces Siempre Siempre \n", "17000500.0 Siempre Siempre Siempre Siempre \n", "17000564.0 Casi siempre A veces A veces Nunca \n", "17015108.0 A veces A veces A veces Nunca \n", "17020582.0 Siempre Siempre Siempre Siempre \n", "17003368.0 Siempre Siempre A veces A veces \n", "17001614.0 A veces A veces Casi siempre Siempre \n", "17017448.0 Siempre Siempre A veces A veces \n", "17013032.0 Siempre Siempre Siempre Siempre \n", "17014760.0 Siempre Siempre Siempre Casi siempre \n", "17003990.0 Casi siempre Nunca Nunca Casi siempre \n", "\n", " covid \\\n", " radio redessociales chat periodicos \n", "id \n", "1000060.0 Nunca Siempre Siempre Siempre \n", "1000734.0 Casi siempre Casi siempre Casi siempre A veces \n", "1000120.0 Siempre Nunca A veces A veces \n", "1000235.0 A veces Siempre Siempre Nunca \n", "1000828.0 A veces Casi siempre Casi siempre A veces \n", "1000352.0 Casi siempre A veces A veces Siempre \n", "1000746.0 Nunca Casi siempre Casi siempre Casi siempre \n", "1000079.0 A veces Siempre Siempre Siempre \n", "1000110.0 Siempre Siempre Siempre Siempre \n", "1000221.0 Nunca Casi siempre A veces Siempre \n", "17000500.0 Casi siempre Casi siempre Casi siempre Casi siempre \n", "17000564.0 A veces Casi siempre Casi siempre A veces \n", "17015108.0 Nunca A veces A veces A veces \n", "17020582.0 Siempre Siempre Siempre Siempre \n", "17003368.0 A veces Siempre Siempre A veces \n", "17001614.0 Casi siempre Nunca A veces Casi siempre \n", "17017448.0 Nunca Siempre Siempre A veces \n", "17013032.0 Siempre Siempre Casi siempre Siempre \n", "17014760.0 Casi siempre Siempre Siempre Siempre \n", "17003990.0 Casi siempre Casi siempre Nunca A veces \n", "\n", " \n", " tv radio \n", "id \n", "1000060.0 A veces Nunca \n", "1000734.0 Casi siempre Casi siempre \n", "1000120.0 Siempre Siempre \n", "1000235.0 A veces Nunca \n", "1000828.0 A veces Nunca \n", "1000352.0 Siempre Siempre \n", "1000746.0 Casi siempre Nunca \n", "1000079.0 Nunca A veces \n", "1000110.0 Siempre Siempre \n", "1000221.0 Siempre Nunca \n", "17000500.0 Siempre Casi siempre \n", "17000564.0 Nunca A veces \n", "17015108.0 Nunca Nunca \n", "17020582.0 Siempre Siempre \n", "17003368.0 Siempre A veces \n", "17001614.0 Siempre Casi siempre \n", "17017448.0 A veces Nunca \n", "17013032.0 Siempre Siempre \n", "17014760.0 Casi siempre Casi siempre \n", "17003990.0 Casi siempre Casi siempre " ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "posiciones_filas = list(range(10)) + list(range(-10,0))\n", "df_10_y_10 = df_covid_19.iloc[posiciones_filas, : ]\n", "df_10_y_10" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Ejemplo 6" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Se nos solicita mostrar un `DataFrame` que contenga únicamente las 3 primeras columnas y de la columna 6 en adelante del `DataFrame` `df_covid_19`." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "scrolled": true, "tags": [ "output_scroll" ] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
noticovid
redessocialeschatperiodicosredessocialeschatperiodicostvradio
id
1000060.0SiempreSiempreCasi siempreSiempreSiempreSiempreA vecesNunca
1000734.0Casi siempreA vecesA vecesCasi siempreCasi siempreA vecesCasi siempreCasi siempre
1000120.0NuncaA vecesA vecesNuncaA vecesA vecesSiempreSiempre
1000235.0SiempreSiempreA vecesSiempreSiempreNuncaA vecesNunca
1000828.0Casi siempreA vecesA vecesCasi siempreCasi siempreA vecesA vecesNunca
...........................
17001614.0A vecesA vecesCasi siempreNuncaA vecesCasi siempreSiempreCasi siempre
17017448.0SiempreSiempreA vecesSiempreSiempreA vecesA vecesNunca
17013032.0SiempreSiempreSiempreSiempreCasi siempreSiempreSiempreSiempre
17014760.0SiempreSiempreSiempreSiempreSiempreSiempreCasi siempreCasi siempre
17003990.0Casi siempreNuncaNuncaCasi siempreNuncaA vecesCasi siempreCasi siempre
\n", "

216092 rows × 8 columns

\n", "
" ], "text/plain": [ " noti covid \\\n", " redessociales chat periodicos redessociales chat \n", "id \n", "1000060.0 Siempre Siempre Casi siempre Siempre Siempre \n", "1000734.0 Casi siempre A veces A veces Casi siempre Casi siempre \n", "1000120.0 Nunca A veces A veces Nunca A veces \n", "1000235.0 Siempre Siempre A veces Siempre Siempre \n", "1000828.0 Casi siempre A veces A veces Casi siempre Casi siempre \n", "... ... ... ... ... ... \n", "17001614.0 A veces A veces Casi siempre Nunca A veces \n", "17017448.0 Siempre Siempre A veces Siempre Siempre \n", "17013032.0 Siempre Siempre Siempre Siempre Casi siempre \n", "17014760.0 Siempre Siempre Siempre Siempre Siempre \n", "17003990.0 Casi siempre Nunca Nunca Casi siempre Nunca \n", "\n", " \n", " periodicos tv radio \n", "id \n", "1000060.0 Siempre A veces Nunca \n", "1000734.0 A veces Casi siempre Casi siempre \n", "1000120.0 A veces Siempre Siempre \n", "1000235.0 Nunca A veces Nunca \n", "1000828.0 A veces A veces Nunca \n", "... ... ... ... \n", "17001614.0 Casi siempre Siempre Casi siempre \n", "17017448.0 A veces A veces Nunca \n", "17013032.0 Siempre Siempre Siempre \n", "17014760.0 Siempre Casi siempre Casi siempre \n", "17003990.0 A veces Casi siempre Casi siempre \n", "\n", "[216092 rows x 8 columns]" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "posiciones_columnas = list(range(3)) + list(range(5, len(df_covid_19.columns)))\n", "df_3_y_6_en_adelante = df_covid_19.iloc[ : , posiciones_columnas]\n", "df_3_y_6_en_adelante" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2.2. Filtrado por niveles " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "El objeto `IndexSlice` nos permite indicar, para cada nivel de un objeto `MultiIndex`, qué elementos queremos incluir." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Ejemplo 7" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A partir de la base de datos del BID, nos solicitan seleccionar las columnas que tengan información de noticias generales (`\"noti\"`) sobre el uso del `\"chat\"` o `\"tv\"`:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "scrolled": true, "tags": [ "output_scroll" ] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
noti
chattv
id
1000060.0SiempreA veces
1000734.0A vecesCasi siempre
1000120.0A vecesSiempre
1000235.0SiempreA veces
1000828.0A vecesA veces
.........
17001614.0A vecesSiempre
17017448.0SiempreA veces
17013032.0SiempreSiempre
17014760.0SiempreCasi siempre
17003990.0NuncaCasi siempre
\n", "

216092 rows × 2 columns

\n", "
" ], "text/plain": [ " noti \n", " chat tv\n", "id \n", "1000060.0 Siempre A veces\n", "1000734.0 A veces Casi siempre\n", "1000120.0 A veces Siempre\n", "1000235.0 Siempre A veces\n", "1000828.0 A veces A veces\n", "... ... ...\n", "17001614.0 A veces Siempre\n", "17017448.0 Siempre A veces\n", "17013032.0 Siempre Siempre\n", "17014760.0 Siempre Casi siempre\n", "17003990.0 Nunca Casi siempre\n", "\n", "[216092 rows x 2 columns]" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_covid_19.loc[:, pd.IndexSlice[\"noti\", ('chat','tv')]]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2.3. Filtrado condicional" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "El filtrado condicional nos permite indicarle a un `DataFrame`, mediante un arreglo de objetos tipo `bool`, cuales elementos incluir. Podemos declarar un arreglo de objetos tipo `bool` aplicando, término a término, los operadores relacionales (`==`, `!=`, `>`, `<`, `>=`, `<=`) o lógicos (`&`, `|`, `~`) que ya conoces." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A continuación, encuentras un ejemplo utilizando un operador relacional:\n", "\n", "```python\n", "np.array([2, 2, 3, 4]) >= 3\n", "\n", ">>> array([False, False, True, True])\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A continuación, encuentras un ejemplo utilizando un operador lógico:\n", "\n", "```python\n", "np.array([True, False, False, True]) | np.array([False, True, False, True])\n", "\n", ">>> array([ True, True, False, True])\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Veamos un ejemplo de cómo aplicar filtrado condicional a las filas de un `DataFrame`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Ejemplo 8" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Seleccionemos los registros correspondientes a personas menores de 35 años, oriundas de `\"Lima\"`." ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
NombreApellidoEdadCiudad
(Pablo, Stecco)PabloStecco30Lima
\n", "
" ], "text/plain": [ " Nombre Apellido Edad Ciudad\n", "(Pablo, Stecco) Pablo Stecco 30 Lima" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nombres[(nombres['Edad'] <= 35) & (nombres['Ciudad'] == \"Lima\")]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Veamos un ejemplo de cómo aplicar filtrado condicional a las columnas de un `DataFrame`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Ejemplo 9" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Seleccionemos los registros correspondientes a personas menores de 35 años, oriundas de `\"Lima\"`, exluyendo las columnas cuyo nombre tenga menos de 6 caracteres." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Para esto, utilizamos el atributo `loc`." ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
NombreApellidoCiudad
(Pablo, Stecco)PabloSteccoLima
\n", "
" ], "text/plain": [ " Nombre Apellido Ciudad\n", "(Pablo, Stecco) Pablo Stecco Lima" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nombres.loc[(nombres['Edad'] <= 35) & (nombres['Ciudad'] == \"Lima\"), nombres.columns.str.len() > 5]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Referencias" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Pandas (2020). Documentación sobre el método .iloc(). Recuperado el 11 de febrero de 2020 de: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.iloc.html\n", "\n", "Pandas (2020). Documentación sobre el método .loc(). Recuperado el 11 de febrero de 2020 de: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.loc.html\n", "\n", "Pandas (2020). Documentación sobre el método .IndexSlice() . Recuperado el 11 de febrero de 2020 de: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.IndexSlice.html\n", "\n", "BID (2020). Encuesta Coronavirus BID/Cornell. Recuperado el 11 de febrero de 2020 de: https://data.iadb.org/DataCatalog/Dataset#DataCatalogID=11319/28452" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Créditos" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Autores:** Juan David Reyes Jaimes, Jorge Esteban Camargo Forero, Alejandro Mantilla Redondo, Diego Alejandro Cely Gómez\n", "\n", "**Fecha última actualización:** 12/07/2022" ] } ], "metadata": { "celltoolbar": "Edit Metadata", "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.13" } }, "nbformat": 4, "nbformat_minor": 2 }